package com.android.support.lib.universal.util;

import android.content.Context;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.view.animation.CycleInterpolator;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.LinearInterpolator;
/**
 * 使用说明：
 * 
一：实例化 Utilanim animUtil=new Utilanim();

二：添加动画
animUtil.addAnim(Acitity上下文,xml动画文件Id, 时间, 循环次数, 是否停在最后,控件);

三：添加插入器
// @param i 插入器的类型 0(线性),1(加速),2(减速),3(加速减速),4(正弦曲线)
//@param j 正弦曲线的次数
animUtil.addInterpolator(i, j);

四：添加动画监听器
animUtil.addInstener(new AnimationListener() {
			@Override
			public void onAnimationStart(Animation animation) {
				Log.e("开始", "开始");
			}
			@Override
			public void onAnimationRepeat(Animation animation) {
				Log.e("新一轮开始", "新一轮开始");
				
			}
			@Override
			public void onAnimationEnd(Animation animation) {
				Log.e("结束", "结束");
			}
		});
五：开始动画
animUtil.startAnim();

六：结束动画
animUtil.stopAnim();
 * 
 * @author 彭治铭
 *
 */
public class Utilanim{
	Animation animation=null;
	View view;
	/**
	 * 添加动画
	 * @param context Activity上下文
	 * @param anim 动画文件Id
	 * @param durationMillis 动画的时间,-1为默认xml里的时间
	 * @param repeatCount 循环次数(Integer.MAX_VALUE无限循环),从0开始(0执行一次,1执行两次),-1为默认xml里的次数。
	 * @param bool 动画结束后,状态是否停止在动画结束时的状态
	 * @param view 添加动画的控件
	 */
	public void addAnim(Context context,int anim,long durationMillis,int repeatCount,Boolean bool,View view){
		animation=AnimationUtils.loadAnimation(context, anim);
		if(durationMillis!=-1){
			animation.setDuration(durationMillis);
		}
		if(repeatCount!=-1){
			animation.setRepeatCount(repeatCount);
		}
		//循环次数，
		animation.setFillAfter(bool);//停在最后  
		this.view=view;
	}
	
	/**
	 * @添加动画插入器
	 * @0循环动画不停顿动画从开始到结束变化率是线性变化
	 * @1动画从开始到结束变化率是一个加速的过程
	 * @2动画从开始到结束变化率是一个减速的过程
	 * @3动画从开始到结束变化率是先加速后减速的过程
	 * @4变化率为正弦曲线
	 * @param i 插入器的类型 0(线性),1(加速),2(减速),3(加速减速),4(正弦曲线)
	 * @param j 正弦曲线的次数
	 */
	public void addInterpolator(int i,int j){
		switch (i) {
		case 0:
			animation.setInterpolator(new LinearInterpolator());
			break;

		case 1:
			animation.setInterpolator(new AccelerateInterpolator());
			break;
		case 2:
			animation.setInterpolator(new DecelerateInterpolator());
			break;
		case 3:
			animation.setInterpolator(new AccelerateDecelerateInterpolator());
			break;
		case 4:
			/**
			 * 参数为1的整数倍,表示正弦曲线效果的次数
			 * 变化率为正弦曲线
			 */
			animation.setInterpolator(new CycleInterpolator(j));
			break;
		}
	}
	/**
	 * @添加动画监听器重写监听器里的一下方法
	 * @onAnimationStart第一轮动画开始的时候执行
	 * @onAnimationRepeat新一轮动画开始的时候执行
	 * @onAnimationEnd所有循环动画结束的时候执行
	 * @param listener
	 */
	public void addInstener(AnimationListener listener){
		animation.setAnimationListener(listener);
	}
	
	/**
	 * 开始动画
	 */
	public void startAnim(){
		view.startAnimation(animation);
	}
	
	/**
	 * 清除动画
	 */
	public void stopAnim(){
		view.clearAnimation();
	}
}
